﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using CRC.Inspecciones.Dominio.Controlador;
using CRC.UserControls;

namespace CRC.Inspecciones.Presentacion
{
    public partial class UsrListadoHojasInspeccion : UserControl, ListaHojasInspeccionListener
    {
        private ControladorListarHojasInspeccion cLHI = new ControladorListarHojasInspeccion();

        public UsrListadoHojasInspeccion()
        {
            InitializeComponent();
            
            try
            {
                //Cargar filtros
                cmbFiltroYear.DataSource = cLHI.ObternerAñosConHojasDeInspeccion(); //Cargar Años
                if (cmbFiltroYear.Items.Count > 0 )cmbFiltroYear.SelectedIndex = 0;
                cmbFiltroTipo.SetData(cLHI.ObtenerTipoHojasInspeccion()); //Cargar tipos de hoja
                cmbFiltroZona.SetData(cLHI.ObtenerZonas()); //Cargar zonas

                cmbFiltroTipo.SelectedIndexChanged+=new EventHandler(cmbFiltroTipo_SelectedIndexChanged);
                cmbFiltroYear.SelectedIndexChanged+=new EventHandler(cmbFiltroYear_SelectedIndexChanged);
                cmbFiltroZona.SelectedIndexChanged+=new EventHandler(cmbFiltroZona_SelectedIndexChanged);

                //Cargar hojas de inspeccion
                CargarDatosHojas();
            }
            catch (Exception ex) 
            {
                MessageBox.Show(
                    ex.Message, "Error", 
                    MessageBoxButtons.OK, MessageBoxIcon.Warning
                );
            }
        }

        #region " Operaciones "
        
        private void LlenarListaConDatos(IList<Object[]> pDatosHojas)
        {
            dG.Rows.Clear();

            int i = 0;
            foreach (Object[] hoja in pDatosHojas)
            {
                dG.Rows.Add(hoja);
                if ((bool)hoja[6]) // Si es borrador resalta el color de la fila
                {
                    dG.Rows[i].DefaultCellStyle.BackColor = Color.LightSalmon;
                    dG.Rows[i].Cells["fVer"].Value = "Editar borrador";
                }
                else
                {
                    dG.Rows[i].Cells["fVer"].Value = "Ver";
                    dG.Rows[i].DefaultCellStyle.BackColor = Color.Honeydew;
                }
                i++;
            }
        }

        private void CargarDatosHojas()
        {
                int? intAño = null, intZona = null;
                String strTipoHoja = String.Empty;

                intAño = (cmbFiltroYear.SelectedValue != null) ? (int?)cmbFiltroYear.SelectedValue : null;
                strTipoHoja = (cmbFiltroTipo.SelectedKey != null) ? (String)cmbFiltroTipo.SelectedKey : null;
                intZona = (cmbFiltroZona.SelectedKey != null) ? (int?)cmbFiltroZona.SelectedKey : null;

                this.lblInfo.Text = "Hojas de Inspección - Cargando...";
                backgroundWorker1.RunWorkerAsync(new Object[] { intAño, strTipoHoja, intZona });
        }

        #endregion 

        #region " Eventos "

            private void dG_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                DataGridView lista =(DataGridView)sender;
                String strNombreColumna = lista.Columns[e.ColumnIndex].Name;
                
                if (strNombreColumna.CompareTo("fVer") == 0)
                {
                    int intIdHoja = (int)dG.Rows[e.RowIndex].Cells["fId"].Value;
                    
                    UsrHojaInspeccion usrHojaImpresion = new UsrHojaInspeccion(intIdHoja);
                    usrHojaImpresion.Left = 0;
                    usrHojaImpresion.Top = 0;
                    this.Controls.Add(usrHojaImpresion);

                    usrHojaImpresion.Show();
                    usrHojaImpresion.BringToFront();
                    usrHojaImpresion.Dock= DockStyle.Fill;
                }
            }

            private void btnCerrar_Click(object sender, EventArgs e)
            {
                this.Dispose();         
            }

            private void btnAdd_Click(object sender, EventArgs e)
            {
                UsrAñadirHojaInspeccionEnBlanco usrNuevaHojaEnBlanco = new UsrAñadirHojaInspeccionEnBlanco();
                usrNuevaHojaEnBlanco.añadirListaHojaInspeccionListener(this);
                usrNuevaHojaEnBlanco.Top = this.Height/3 - usrNuevaHojaEnBlanco.Height/2;
                usrNuevaHojaEnBlanco.Left = this.Width/2 - usrNuevaHojaEnBlanco.Width/2;

                this.Controls.Add(usrNuevaHojaEnBlanco);
                usrNuevaHojaEnBlanco.Show();
                usrNuevaHojaEnBlanco.BringToFront();
                
            }

            private void btnBorrar_Click(object sender, EventArgs e)
            {
                ControladorEliminarHojaInspeccion cEHI = new ControladorEliminarHojaInspeccion();

                if (MessageBox.Show(
                    "¿Está seguro de querer eliminar esta hoja?", "Confirmar", 
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question
                ) == DialogResult.Yes)
                {
                    if (dG.SelectedRows.Count > 0) 
                    {
                        try { 
                            int intIdHoja = (int)dG.SelectedRows[0].Cells["fId"].Value;
                            cEHI.EliminarHojaInspeccion(intIdHoja);
                            dG.Rows.Remove(dG.SelectedRows[0]);
                        }
                        catch (Exception ex) {
                            MessageBox.Show(
                                ex.Message,"Error",
                                MessageBoxButtons.OK, MessageBoxIcon.Warning
                            );
                        }
                    }
                }
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (dG.SelectedRows.Count > 0)
                {
                    int intIdHoja = (int)dG.SelectedRows[0].Cells["fId"].Value;
                    Object[] infoHoja = null;
                    ControladorModificarHojaInspeccion cMHI = new ControladorModificarHojaInspeccion();
                    infoHoja = cMHI.obtenerInfoHojaInspeccion(intIdHoja);
                    if (!(Boolean)infoHoja[8])
                    {
                        this.folderBrowserDialog1.ShowDialog();
                        if (this.folderBrowserDialog1.SelectedPath.Length > 0)
                        {
                            string ruta = this.folderBrowserDialog1.SelectedPath;
                            CRC_Imprimir.Printing_Form impr = new CRC_Imprimir.Printing_Form();
                            String strTipoHoja = (String)infoHoja[7];
                            impr.Show(this);
                            impr.Imprimir(infoHoja, ruta);

                        }
                    }
                    else
                    {
                        MessageBox.Show("Este ducumento no se puede imprimir porque es un borrador.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    }
                }
            }

            private void cmbFiltroYear_SelectedIndexChanged(object sender, EventArgs e)
            {
                ComboBox cmb = (ComboBox)sender;
                if (cmb.SelectedIndex != -1) { CargarDatosHojas(); }
            }

            private void cmbFiltroTipo_SelectedIndexChanged(object sender, EventArgs e)
            {
                ComboBox cmb = (ComboBox)sender;
                if (cmb.SelectedIndex != -1) { CargarDatosHojas(); }
            }

            private void cmbFiltroZona_SelectedIndexChanged(object sender, EventArgs e)
            {
                ComboBox cmb = (ComboBox)sender;
                if (cmb.SelectedIndex != -1) { CargarDatosHojas(); }
            }

            private void butLimpiarFiltro_Click(object sender, EventArgs e)
            {
                cmbFiltroTipo.SelectedIndex = -1;
                cmbFiltroYear.SelectedIndex = -1;
                cmbFiltroZona.SelectedIndex = -1;
                CargarDatosHojas();
            }

        #endregion

        #region " backgroundWorker1 "

         private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            try
            {
                Object[] parametros = (Object[])e.Argument;
                e.Result = (Object)cLHI.ListarHojasInspeccion((int?)parametros[0], (String)parametros[1], (int?)parametros[2]);
            }
            catch (Exception ex)
            {
                e.Cancel = true;
                MessageBox.Show(
                    ex.Message, "Advertencia",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning
                );
            }
        }

        void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            this.lblInfo.Text = "Hojas de Inspección";
            LlenarListaConDatos((IList<Object[]>)e.Result);
        }
        
        #endregion
       
        #region Miembros de ListaHojasInspeccionListener

        void ListaHojasInspeccionListener.añadirHoja(
            int pIntId, 
            DateTime pFecha, 
            String pStrCodigoTipoHoja,
            String pStrZona,
            String pstrNombreSalon)
        {

            dG.Rows.Insert(0, new object[] { pIntId, pFecha.ToShortDateString(), pStrCodigoTipoHoja, pStrZona, pstrNombreSalon });
            dG.Rows[0].DefaultCellStyle.BackColor = Color.LightSalmon;
            dG.Rows[0].Cells["fVer"].Value = "Editar Borrador";

            //Editar hoja en borrador
           
            //UsrHojaInspeccion usrHojaInspeccion = new UsrHojaInspeccion(pIntId);
            //usrHojaInspeccion.añadirListaHojaInspeccionListener(this);
            //this.Controls.Add(usrHojaInspeccion);
            //usrHojaInspeccion.Show();
            //usrHojaInspeccion.BringToFront();
            //usrHojaInspeccion.Dock=DockStyle.Fill;
        }

        public void anadirHoja(CRC.Inspecciones.Dominio.Clases.Impreso pImpreso, String psContenidoDinamicoHTML)
        {
            //dG.Rows.Insert(0, new object[] { pImpreso.Id, pImpreso.FechaCreacion.ToShortDateString(), 
                //pImpreso.Tipo.Codigo, "", pImpreso.SalonInspeccionado.Nombre_Salon });
            dG.Rows[0].DefaultCellStyle.BackColor = Color.LightSalmon;
            dG.Rows[0].Cells["fVer"].Value = "Editar Borrador";

            FrmImpreso usrTO34 = new FrmImpreso(pImpreso.Id);
            this.Controls.Add(usrTO34);
            usrTO34.Show();
            usrTO34.BringToFront();
            usrTO34.Dock = DockStyle.Fill;

        }

        void ListaHojasInspeccionListener.guardarDefinitiva(int pIntId)
        {
            foreach (DataGridViewRow aRow in dG.Rows)
            {
                //Cambiar el color de la fila y texto última celda/botón
                if ((int)aRow.Cells["fId"].Value == pIntId) 
                {
                    aRow.DefaultCellStyle.BackColor = Color.Honeydew;
                    aRow.Cells["fVer"].Value = "Ver";
                    return;
                }
            }
        }


        #endregion

        #region ListaHojasInspeccionListener Members



        #endregion
    }
}
